package com.szholly.data.jdbc.util;

import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.SQLException;

import org.apache.log4j.Logger;

public class ClobStringUtil {

	private static Logger logger = Logger.getLogger(ClobStringUtil.class);

	// Clobת����String �ķ���
	public static String Clob2String(Clob clob) {
		String content = null;
		StringBuffer stringBuf = new StringBuffer();
		try {
			int length = 0;
			Reader inStream = clob.getCharacterStream(); // ȡ�ô��ֲ�ζ�����������
			char[] buffer = new char[10];
			while ((length = inStream.read(buffer)) != -1) // ��ȡ��ݿ� //ÿ10��10����ȡ
			{
				for (int i = 0; i < length; i++) {
					stringBuf.append(buffer[i]);
				}
			}

			inStream.close();
			content = stringBuf.toString();
		} catch (Exception ex) {
			ex.printStackTrace();
			logger.info(ex.getMessage());
		}
		return content;
	}

	public static byte[] Blob2Byte(Blob blob) {
		byte[] msgContent = null;
		try {
			long len = blob.length();
			Long lenL = new Long(len);
			msgContent = blob.getBytes(0, lenL.intValue());
		} catch (SQLException e) {
			e.printStackTrace();
		} // BLOBת��Ϊ�ֽ�����
		return msgContent;
	}

	public static String Blob2String(Blob blob) {
		String newStr = ""; // �����ַ�
		long BlobLength; // BLOB�ֶγ���
		byte[] bytes; // BLOB��ʱ�洢�ֽ�����
		int i = 1; // ѭ������
		int depth = 100000;

		try {
			BlobLength = blob.length(); // ��ȡBLOB����?
			Long BlobLengthL = new Long(BlobLength);
			byte[] msgContent = blob.getBytes(0, BlobLengthL.intValue()); // BLOBת��Ϊ�ֽ�����
			if (msgContent == null || BlobLength == 0) // ���Ϊ�գ����ؿ�ֵ?
			{
				return "";
			} else {
				while (i < BlobLength) // ѭ�������ַ�ת����ÿ��1024��Oracle�ַ��������4k
				{
					bytes = blob.getBytes(i, depth);
					i = i + depth;
					newStr = newStr + new String(bytes, "gb2312");
				}

			}
		} catch (Exception ex) {
			ex.printStackTrace();
			logger.info(ex.getMessage());
		}
		return newStr;
	}

}